/**
 * 版权所有 ©2014 威海简单软件科技有限公司 保留所有权利
 * 创建日期：2014年3月4日 上午9:25:01
 * 作者：张世鹏
 */
package com.whxd.framework.utils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

/**
 * 字符转拼音辅助类
 * 
 * @author 张世鹏
 * @since 2014年3月4日
 */
public class PinyinUtils {

	/**
	 * 中文字符串转拼音
	 */
	public static String toPinyin(String zhongwen) {
		try {
			String pinyinStr = "";
			char[] t1 = zhongwen.toCharArray();
			String[] t2 = new String[t1.length];
			// 设置拼音输出的格式
			HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
			format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
			format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
			format.setVCharType(HanyuPinyinVCharType.WITH_V);
			// 判断用户输入的是否为汉字
			for (int i = 0; i < t1.length; i++) {
				Pattern pattern = Pattern.compile("[\\u4e00-\\u9fa5]+");
				String zi = String.valueOf(t1[i]);
				Matcher m = pattern.matcher(zi);
				if (m.find()) {
					t2 = PinyinHelper.toHanyuPinyinStringArray(t1[i], format);// 将汉字的几种全拼都存到t2数组中
					pinyinStr += t2[0];// 取出该汉字全拼的第一种读音并连接到字符串t4后
				} else {
					// 如果不是汉字字符，间接取出字符并连接到字符串t4后
					pinyinStr += t1[i];
				}
			}
			return pinyinStr.toUpperCase();
		} catch (Exception e) {
			return null;
		}
	}

	/**
	 * 汉字转拼音首字母(小写)
	 */
	public static String converterToFirstSpell(String chines) {
		String pinyinName = "";
		char[] nameChar = chines.toCharArray();
		HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
		defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
		defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
		for (int i = 0; i < nameChar.length; i++) {
			if (nameChar[i] > 128) {
				try {
					pinyinName += PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat)[0].charAt(0);
				} catch (BadHanyuPinyinOutputFormatCombination e) {
					e.printStackTrace();
				}
			} else {
				pinyinName += nameChar[i];
			}
		}
		return pinyinName;
	}

	public static void main(String[] args) throws BadHanyuPinyinOutputFormatCombination {
		String res = converterToFirstSpell("出差报销");
		System.out.println(res);
	}

}
